package oop.controller.action.section;

import java.sql.SQLException;

import oop.controller.action.DefaultAction;
import oop.data.Test;
import oop.db.dao.SectionDAO;
import oop.db.dao.TestDAO;
import oop.db.dao.TestVersionDAO;

public class CreateAction extends DefaultAction {

	@Override
	public void performImpl() throws Exception {
		try {
			long testId = Long.parseLong(request.getParameter("sc_testid"));
			Test test = TestDAO.fetchById(testId);
			if (test == null) {
				error("Không tìm thấy đề thi được yêu cầu.");
				return;
			}

			try {
				TestVersionDAO.dropByTest(test.getId());
			} catch (SQLException e) {
				if (e.getErrorCode() == 1451) {
					error("Không thể sửa đề thi đang sử dụng");
					return;
				} else {
					throw e;
				}
			}
			
			title("Thêm mục mới vào đề " + test.getName());
			request.setAttribute("test", test);

			String submit = request.getParameter("sc_submit");
			if ("create".equals(submit)) {
				doCreate(testId, test);
			}
		} catch (NumberFormatException ex) {
			error("ID không hợp lệ.");
		}
	}

	private void doCreate(long testId, Test test) throws SQLException {
		String text = request.getParameter("sc_text");
		String orderStr = request.getParameter("sc_order");

		int order = 0;
		if ("last".equals(orderStr)) {
			order = SectionDAO.nextAvailableOrder(testId);
		} else {
			order = Integer.parseInt(orderStr);
			SectionDAO.shiftDown(testId, order);
		}

		SectionDAO.create(text, order, testId);

		setNextAction("test.view&tv_id=" + test.getId());
	}

}
